function   smolayak_simulate_parameter_combinations( parameters_matrix, solution_path, output_info )

simulation_key_moments_for_parameter_calibration;   % Input the scripts
random_seed = 1;   N_years=10000;   
 
tic;
iter_start = 1;   iter_end = size(parameters_matrix,1);  %N_trials
for(iter=iter_start:iter_end)
    file_name = [solution_path, num2str(iter) ,'.mat'];
    content = readtable( output_info.file_name ,'Sheet', output_info.sheet ,  'Range',  [ [ output_info.starting_cell_column, num2str(iter-1+output_info.starting_cell_row) ], ':', [ output_info.ending_cell_column, num2str(iter-1+output_info.starting_cell_row) ] ],  'ReadVariableNames', false ); 
    if(  ~isfile(file_name) || sum(sum(isnan(content.Variables)))==0 ) % if the file does not exist, or the simulation has been done, go to the next loop.
        continue;
    end
    disp( '-------------------------------------------' )
    disp( ['               Simulate Trial   ', num2str(iter)] )
    disp( '-------------------------------------------' )

    S = load(file_name);    
    model_sol = post_processing(S.model_sol);    par_new = model_sol.par;  
    w_init=0.15;  lambda_init= (par_new.lambda_H + par_new.lambda_L)/2;
    
    try
        shocks = shocks_generation( N_years,  par_new, random_seed);  
        sim = simulate( w_init, lambda_init,  shocks.dB_vec, shocks.dN_vec,  N_years, model_sol,  par_new  );
        [ rational_moments,  behavioral_moments ] = simulation_moments( sim, model_sol );
        if(  par_new.model_name ~= "behavioral"  )  % rational models, including the benchmark and the rational belief model.  
            output_matrix = [ calibration_moments(rational_moments, par_new) ];
        else
            output_matrix = [ calibration_moments(behavioral_moments, par_new) ];
        end
        writematrix( output_matrix, output_info.file_name ,'Sheet', output_info.sheet ,  'Range',  [ [ output_info.starting_cell_column, num2str(iter-1+output_info.starting_cell_row) ], ':', [ output_info.ending_cell_column, num2str(iter-1+output_info.starting_cell_row) ] ] );  
    catch
        disp( ['Fail to simulate model ', file_name] )
    end
    
%     time = toc;  
%     if( iter>iter_start )
%         time_left = (iter_end-iter) / (iter - iter_start) * time / 60 ; 
%         disp( [ 'Time left: ',  num2str(time_left)  , ' minutes' ] )
%     end
end
